package com.zyh.homeworkzhuantike;

import java.util.Scanner;

public class Test8 {
    public static void main(String[] args) {
        /*
        已知一个数组 arr = {17, 29, 34, 42, 51}; 键盘录入一个数据，查找该数据在数组中的索引。
	    并在控制台输出找到的索引值。如果没有查找到，则输出-1
         */
        int[] arr = {17, 29, 34, 42, 51};
//        键盘录入要查询的数据
        System.out.println("请输入要查询的数据：");
        int n = new Scanner(System.in).nextInt();
        int index = find(arr, n);
    }

    //二分查找
    public static int find(int[] arr, int key) {
//        校验数据key合法性
        if (key<0){
            System.err.println("输入的数据有误！");
            return -1;
        }
//        校验数组的合法性
        if (arr==null||arr.length==0){
            System.err.println("输入的数组有误！");
            return -1;
        }
        int min = 0, max = arr.length - 1, mid;
        while (min <= max) {
            mid = (min + max) / 2;
            if (key>arr[mid]){
                min=mid+1;
            }
            else if (key<arr[mid]){
                max=mid-1;
            }
            else {
                System.out.println(key+"在数组中的索引为："+mid);
                return mid;
            }
        }
        System.out.println(key+"不在数组中！");
        return -1;
    }
}
